//
// Created by DengLibin on 2019/1/7 0007.
//
#include <iostream>
#include <string>
using namespace std;

#define  N 9  //杨辉三角高度(行数)
//打印数组，跳过0
void showArr46(int **arr, int len){
    for(int i = 0; i < len; i++){
        for(int k = 0; k < (N - i); k++){
            cout << "  ";
        }
        for(int j = 0; j <= i ;j++){
            int x  = arr[i][j];
            if(x>=10){
                cout << x << " " ;
            }else{
                cout << x << "  " ;
            }

        }
        cout <<endl;
    }
}

/**
 * 打印杨辉三角 每一行数字的个数等于行数 数字的值等于上一行两肩数值的和
 * @param n  行数
 */
void showYangHui(){
    int **arr  =  new int* [N];   //分配一个指针数组，将其首地址保存在a中   、

    for(int i = 0; i < N; i++) {   //为指针数组的每个元素分配一个数组
        arr[i] = new int[N];
    }

    for (int i = 0; i < N; ++i) {
        for (int j = 0; j <= i; ++j) {
            if(j == 0 || j == i){ //每一行的第一列和左后一列为1
                arr[i][j] = 1;
            }else{
                arr[i][j] = arr[i-1][j-1]+ arr[i-1][j]; //等于上一行左右两个数的和
            }
        }
    }
    showArr46(arr,N);
    for(int i = 0; i < N; ++i){
        delete []arr[i];
    }
    delete []arr;

}



/**
 * 杨辉三角
 * @return
 */
int main46(){
    showYangHui();
    return 0;
}